package com.hspedu.codeblock;

/**
 * 1.static代码块，是类加载时执行，只会执行一次
 * 2.普通代码块是在 创建对象时嗲用的，创建一次，调用一次
 */
public class CodeDetail01 {
    public static void main(String[] args) {
        //new BB();//1.创建对象实例时执行代码块
        new AA();//2.父类构造器先加载，代码块先于构造器加载
        System.out.println(Cat.n1);//使用类的静态成员时（静态属性，静态方法），也会先加载静态代码块
//        new Cat();
    }
}
class Cat{
    public static int n1 = 999;//静态属性
    //静态代码块
    static {
        System.out.println("Cat的静态代码块被执行");
    }
    {
        System.out.println("Cat的普通代码块");//只有创建对象的时候才运行，调用静态成员的时候不会执行
    }
}

class BB{
    static {
        System.out.println("BB的静态代码块被执行");
    }
}
class AA extends BB{
    static{
        System.out.println("AA的静态代码块被执行");
    }
}


